package medium颜色分类;

import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Solution {
    public void sortColors(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for (int num : nums) {
            if (!map.containsKey(num))
                map.put(num, 1);
            else
                map.put(num, map.get(num) + 1);
        }
        int a = 0;
        int b = 0;
        int c = 0;
        if (map.containsKey(0)) {
            for (int i = 0; i < map.get(0); i++) {
                list.add(0);
            }
        }
        if (map.containsKey(1)) {
            for (int i = 0; i < map.get(1); i++) {
                list.add(1);
            }
        }
        if (map.containsKey(2)) {
            for (int i = 0; i < map.get(2); i++) {
                list.add(2);
            }
        }
        for (int i = 0; i < nums.length; i++) {
            nums[i] = list.get(i);
        }
    }
    public void sortColors1(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        for (int num : nums) {
            if (!map.containsKey(num))
                map.put(num, 1);
            else
                map.put(num, map.get(num) + 1);
        }
        int a = 0;
        int b = 0;
        int c = 0;
        if (map.containsKey(0)) {
            a = map.get(0);
        }
        if (map.containsKey(1)) {
            b = map.get(1);
        }
        if (map.containsKey(2)) {
            c = map.get(2);
        }
        for (int i = 0; i < a; i++) {
            nums[i] = 0;
        }
        for (int i = a; i < b+a; i++) {
            nums[i] = 1;
        }
        for (int i = a+b; i < c+a+b; i++) {
            nums[i] = 2;
        }
        for (int num:
                nums) {
            System.out.println(num);
        }
    }
    public void sortColors2(int[] nums) {
        int a = 0;
        int b = 0;
        int c = 0;
        for (int num:
                nums) {
            if (num == 0)
                a++;
            else if (num == 1)
                b++;
            else
                c++;
        }
        for (int i = 0; i < a; i++) {
            nums[i] = 0;
        }
        for (int i = a; i < b+a; i++) {
            nums[i] = 1;
        }
        for (int i = a+b; i < c+a+b; i++) {
            nums[i] = 2;
        }
        for (int num:
                nums) {
            System.out.println(num);
        }
    }
    @Test
    public void test(){
        int[] nums = {2,0,2,1,1,0};
        sortColors2(nums);
    }
}
